/**
 ******************************************************************************
 * @file           : bsp_24cxx_config.h
 * @brief          : AT24CXX Configuration File (STM32H7xx)
 ******************************************************************************
 * @attention
 *
 * AT24CXX EEPROM配置文件
 * 包含日志配置、芯片型号选择、I2C通信配置等
 * 用户根据实际硬件修改此文件
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_24CXX_CONFIG_H
#define __BSP_24CXX_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32h7xx.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/

/* ============================================================================ */
/*                       日志系统配置（改这里的数字）                             */
/* ============================================================================ */
/* 日志后端选择：1=EasyLogger, 2=printf, 0=关闭 */
#define AT24CXX_USE_LOG     1

/* 根据配置自动定义日志宏 */
#if (AT24CXX_USE_LOG == 1)
    /* 使用EasyLogger */
    #ifndef LOG_TAG
        #define LOG_TAG    "24CXX"
    #endif
    #include "elog.h"
    
#elif (AT24CXX_USE_LOG == 2)
    /* 使用printf */
    #include <stdio.h>
    #define log_i(fmt, ...)     printf(fmt "\r\n", ##__VA_ARGS__)
    #define log_w(fmt, ...)     printf("[WARN] " fmt "\r\n", ##__VA_ARGS__)
    #define log_e(fmt, ...)     printf("[ERROR] " fmt "\r\n", ##__VA_ARGS__)
    #define log_d(fmt, ...)     printf("[DEBUG] " fmt "\r\n", ##__VA_ARGS__)
    
#else
    /* 关闭日志 */
    #define log_i(fmt, ...)
    #define log_w(fmt, ...)
    #define log_e(fmt, ...)
    #define log_d(fmt, ...)
#endif

/* ============================================================================ */
/*                          I2C通信配置（用户可修改）                            */
/* ============================================================================ */

/**
 * I2C通信方式选择
 * 
 * 可选值：
 *   1 = 使用硬件I2C（调用bsp_iic模块）
 *   0 = 使用软件I2C（调用bsp_iic_gpio模块）
 * 
 * 说明：
 *   硬件I2C：性能好，CPU占用低，固定引脚
 *   软件I2C：引脚灵活，任意GPIO可用，CPU占用高
 */
#define USE_HARDWARE_I2C    1                   /*!< 1: 硬件I2C, 0: 软件I2C */

/* I2C底层驱动包含 */
#if (USE_HARDWARE_I2C == 1)
    #include "../../BSP/IIC/bsp_iic.h"              /* 硬件I2C驱动 */
#else
    #include "../../BSP/IIC_GPIO/bsp_iic_gpio.h"    /* 软件I2C驱动 */
#endif

/* AT24CXX设备地址 */
#define AT24CXX_DEVICE_ADDR_BASE    0xA0        /*!< AT24CXX设备基地址 */
#define AT24CXX_DEVICE_ADDR_READ    0xA1        /*!< AT24CXX设备读取地址 */

/* AT24CXX时序参数 */
#define AT24CXX_WRITE_DELAY_MS      10          /*!< EEPROM写入延时(ms) */
#define AT24CXX_TEST_VALUE          0x55        /*!< 设备检测测试值 */

/* 延时函数配置 - 用户可根据实际情况修改 */
#define AT24CXX_DELAY_MS(ms)        HAL_Delay(ms)   /*!< 延时函数宏（可改为cotOs_Wait或自定义） */
/* 可选配置示例：
 * #define AT24CXX_DELAY_MS(ms)    cotOs_Wait(ms)   // RTOS延时
 * #define AT24CXX_DELAY_MS(ms)    delay_ms(ms)     // 自定义延时
 */

/* ============================================================================ */
/*                          芯片型号配置（用户可修改）                            */
/* ============================================================================ */

/* AT24CXX型号定义 - EEPROM容量(字节单位) */
#define AT24C01     127         /*!< AT24C01容量: 128字节 */
#define AT24C02     255         /*!< AT24C02容量: 256字节 */
#define AT24C04     511         /*!< AT24C04容量: 512字节 */
#define AT24C08     1023        /*!< AT24C08容量: 1024字节 */
#define AT24C16     2047        /*!< AT24C16容量: 2048字节 */
#define AT24C32     4095        /*!< AT24C32容量: 4096字节 */
#define AT24C64     8191        /*!< AT24C64容量: 8192字节 */
#define AT24C128    16383       /*!< AT24C128容量: 16384字节 */
#define AT24C256    32767       /*!< AT24C256容量: 32768字节 */

/* 当前使用的EEPROM型号 */
#define EE_TYPE     AT24C02     /*!< 当前使用AT24C02（256字节） */

/* Exported macro ------------------------------------------------------------*/
/* AT24CXX返回值定义 */
#define AT24CXX_OK      0       /*!< 操作成功 */
#define AT24CXX_ERROR   1       /*!< 操作失败 */

/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* __BSP_24CXX_CONFIG_H */
